# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

"""
因为遍历完两个链表需要的步数是一样的，所以 指针a遍历完链表headA之后遍历headB 会和
指针b遍历完链表headB之后遍历headA 在链表相交处重合从而找到公共节点。
"""

"""网友评论
只要我们的目的地是一样的，我们终究会遇见 
走到尽头见不到你，于是走过你来时的路，等到相遇时才发现，你也走过我来时的路。
我吹过你吹过的晚风~
"""
class Solution:
    def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
        a, b = headA, headB
        while a != b:
            a = a.next if a else headB
            b = b.next if b else headA
        return a